package com.dragon.repository.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.dragon.repository.domain.vo.QuotesVO;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;

import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 * <p>
 * 合同表
 * </p>
 *
 * @author sy
 * @since 2023-06-21
 */
@Getter
@Setter
@TableName("dragon_contract")
public class Contract implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * id
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    /**
     * 合同名称
     */
    private String name;

    /**
     * 合同名称简称
     */
    private String simpleName;

    /**
     * 乙方名称
     */
    private String partyBName;

    /**
     * 甲方代表
     */
    private String lessor;

    /**
     * 甲方联系方式
     */
    private String lessorPhone;

    /**
     * 条款标题
     */
    @TableField(exist = false)
    private String lessorArticleTitle;

    /**
     * 条款内容
     */
    private String lessorArticle;

    /**
     * 模板条款
     */
    @TableField(exist = false)
    private ContractArticle articleList;

    /**
     * 客户id
     */
    private Integer customerId;

    /**
     * 负责人id（用户id）
     */
    private Integer adminId;

    /**
     * 部门id
     */
    private Integer departmentId;

    /**
     * 结算方式：1现结，2月结
     */
    private Integer settlement;


    /**
     * 是否是3d建模:0否，1是
     */
    private Integer modeling;

    /**
     * 创建合同时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    /**
     * 更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.UPDATE)
    private Date updateTime;

    /**
     * 合同编号
     */
    private String num;

    /**
     * 合同金额
     */
    private Double money;

    /**
     * 退款金额
     */
    private Double refundMoney;

    /**
     * 状态：0 待审核 1审核通过 2审核不通过 3作废 4删除
     */
    private Integer status;


    /**
     * 合同类型：1供销合同 2直销合同 3代理合同 4服务合同 5快销合同
     */
    private Integer type;

    /**
     * 备注
     */
    private String remark;

    /**
     * 签订日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date orderTime;

    /**
     * 签订地点
     */
    private String orderAddress;

    /**
     * 乙方联系电话
     */
    private String secondPhone;

    /**
     * 附件
     */
    @TableField(exist = false)
    private List<OtherFile> otherFiles;

    /**
     * 业务员名称
     */
    @TableField(exist = false)
    private String username;

    /**
     * 业务员电话
     */
    @TableField(exist = false)
    private String userPhone;

    /**
     * 部门名称
     */
    @TableField(exist = false)
    private String departmentName;

    /**
     * 申请人名称
     */
    @TableField(exist = false)
    private String applicantName;


    /**
     * 流程数据
     */
    @TableField(exist = false)
    private List<WorkflowJson> workflowJsonList;

    /**
     * 报价id
     */
    private Integer quotesId;

    /**
     * 生产负责人
     */
    private Integer productionPerson;

    /**
     * 收款人
     */
    private Integer payee;

    /**
     * 回款方式 (1、预付（10-100%），2、到付，3、约定时间)
     */
    private Integer paymentMethod;

    /**
     * 预付款
     */
    private Double prepaymentMoney;

    /**
     * 组合方式: 2:到付，3：约定时间
     */
    private Integer combination;

    /**
     * 约定时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date agreeTime;

    /**
     * 送货负责人
     */
    private Integer deliveryOfficer;

    /**
     * 送货地址
     */
    private String address;

    /**
     * 截至时间
     */
    private Date endTime;

    /**
     * 删除标识: 0未删除 1已删除
     */
    private Integer deleted;

    /**
     * 合同进度：1待生产 2已生产 3待发货 4已发货
     */
    private Integer progress;

    /**
     * 补充金额
     */
    private Double supplementMoney;

    /**
     * 补充条款
     */
    private String supplementArticle;

    /**
     * 交货时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date deliveryTime;


    @TableField(exist = false)
    private Quotes quotesData;

    /**
     * 客户信息
     */
    @TableField(exist = false)
    private Customer customerData;

    /**
     * 合同设置信息
     */
    @TableField(exist = false)
    private ContractFit contractFit;

    /**
     * 免审操作：0，不免审，1免审
     */
    @TableField(exist = false)
    private Integer exempt;

    /**
     * 合同产品
     */
    @TableField(exist = false)
    private List<QuotesProducts> quotesProducts;
}
